package my.avoskagae.model.buslogic;

import java.util.List;

import com.google.inject.Inject;

import my.avoskagae.model.AvoskaModelException;
import my.avoskagae.model.entity.Product;
import my.avoskagae.store.abstr.StoreAdapter;

public class MaintenanceProductCatalogImpl implements MaintenanceProductCatalog {

	@Inject
	StoreAdapter storeAdapter;

	public MaintenanceProductCatalogImpl() {
	}


	@Override
	public Product createProduct(String name) throws AvoskaModelException {
		if (name.isEmpty()) {
			throw new AvoskaModelException("Продукт должен иметь не пустое имя"); //TODO Добавить в тест
		} else if (storeAdapter.findPrductByName(name)!=null) {
			throw new AvoskaModelException("Продукт с таким именем уже существует");
		} else {
			return storeAdapter.createProduct(name);
		}
	}


	@Override
	public boolean removeProduct(Product product) throws AvoskaModelException {
		return storeAdapter.removeProduct(product);
	}


	@Override
	public Product renameProduct(Product product, String newName)
			throws AvoskaModelException {
		if (newName.isEmpty()) {
			throw new AvoskaModelException("Продукт должен иметь не пустое имя"); // TODO Добавить в тест
		} else {
			Product pfind = storeAdapter.findPrductByName(newName);
			if (pfind!= null&&!pfind.equals(product)) {
				throw new AvoskaModelException(
						"Продукт с таким именем уже существует"+pfind.toString());
			} else {
				product.setName(newName);
				storeAdapter.updateProduct(product);
			}
		}
		return product;
	}


	@Override
	public Product switchNeedPurchase(Product product, Boolean newNeedPurchase) {
		product.setNeedPurchase(newNeedPurchase);
		storeAdapter.updateProduct(product);
		return product;
	}


	@Override
	public List<Product> getProducts() throws AvoskaModelException {
		return storeAdapter.getProducts();
	}

	@Override
	public StoreAdapter getStoreAdapter() {
		return storeAdapter;
	}
	
	@Override
	public void setStoreAdapter(StoreAdapter storeAdapter) {
		this.storeAdapter = storeAdapter;
	}
	
}
